<?php

class Application_Model_ParkplatzMapper
{
	protected $_dbTable;

	public function setDbTable($dbTable)
	{
		if (is_string($dbTable)) {
			$dbTable = new $dbTable();
		}
		if (!$dbTable instanceof Zend_Db_Table_Abstract) {
			throw new Exception('Invalid table data gateway provided');
		}
		$this->_dbTable = $dbTable;
		return $this;
	}
     
	public function getDbTable()
	{
		if (null === $this->_dbTable) {
			$this->setDbTable('Application_Model_DbTable_Parkplatz');
		}
		return $this->_dbTable;
	}
	
	//Kalendername könnte man rausnehmen
	public function anlegen(Application_Model_Parkplatz $parkplatz){
		
		$data = array(
            'anzahl' => $parkplatz->getAnzahl(),
            'standort' => $parkplatz->getStandort(),
            'beschreibung' => $parkplatz->getBeschreibung(),
			'kalenderName' => $parkplatz->getKalenderName()
		);
		
		$this->getDbTable()->insert($data);
		
	//	$temp = $mapper->fetchStandort($model->getStandort());
		
	}
	
	//ähnlich wie ändern
	public function anlegenKalender ($temp){
		
		$parkplatzNr = $temp[0]->parkplatzNr;
		
		$tempNeu = array(
            'anzahl' => $temp[0]->anzahl,
            'standort' => $temp[0]->standort,
            'beschreibung' => $temp[0]->beschreibung,
			'kalenderName' => $temp[0]->kalenderName
		);
		
		$this->getDbTable()->update($tempNeu, array('parkplatzNr = ?' => $parkplatzNr));
	}
	
	//ändert die Daten in der DB die übergeben werden
	//nicht alle Daten können geändert werden
	public function aendern(Application_Model_Parkplatz $parkplatz, $parkplatzNr = null){
		
		$temp = array(
			'anzahl' => $parkplatz->getAnzahl(),
			'standort' => $parkplatz->getStandort(),
			'beschreibung' => $parkplatz->getBeschreibung()
		);
		
		$this->getDbTable()->update($temp, array('parkplatzNr = ?' => $parkplatzNr));
	}
	
	public function loeschen($parkplatzNr = null){
		
		$this->getDbTable()->delete(array('parkplatzNr = ?' => $parkplatzNr));
	}
	
	//liefert die Gesamtanzahl der verfügbaren Parkplätze in der DB zurück
	public function anzahlGesamt(){
		
		$temp;
		settype($temp, 'integer');
		
		$resultSet = $this->getDbTable()->fetchAll();
		$entries = array();
		
		foreach ($resultSet as $row){
			$entry = new Application_Model_Parkplatz();
			$entry->setAnzahl($row->anzahl);
			$temp = $temp + $entry->getAnzahl();
		}
		
		return $temp;
	}
	
	//überprüft, ob die übergebene Parkplatznummer in der DB vorhanden ist
	public function parkplatzExists ($parkplatzNr = null){
		
		$temp = false;
		
		$resultSet = $this->getDbTable()->fetchAll();
		$entries   = array();
		
		foreach ($resultSet as $row){
			$entry = new Application_Model_Parkplatz();
			$entry->setParkplatzNr($row->parkplatzNr);
		//	$entry->setAnzahl($row->anzahl);
		//	$entry->setStandort($row->standort);
		//	$entry->setBeschreibung($row->beschreibung);
			if ($entry->getParkplatzNr() == $parkplatzNr)
				$temp = true;
		}
		return $temp;
	}
	
	//überprüft, ob der übergebene Standort in der DB vorhanden ist
	public function standortExists ($standort = null){
		
		$temp = false;
		
		$resultSet = $this->getDbTable()->fetchAll();
		$entries   = array();
	
		foreach ($resultSet as $row){
			
			$entry = new Application_Model_Parkplatz();
			$entry->setStandort($row->standort);
			
			$standorttemp = strtolower($entry->getStandort());
			
			if ($standorttemp == strtolower($standort))
				$temp = true;
		}
		return $temp;
	}
	
	//überprüft, ob der übergebene Kalendername in der DB vorhanden ist
	public function kalenderNameExists ($kalenderName = null){
		
		$temp = false;
		
		$resultSet = $this->getDbTable()->fetchAll();
		$entries   = array();
		
		foreach ($resultSet as $row){
			
			$entry = new Application_Model_Parkplatz();
			$entry->setKalenderName($row->kalenderName);
			
			if ($entry->getKalenderName() == $kalenderName)
				$temp = true;
		}
		return $temp;
	}
	
	//liefert ein Array zurück, welches über die Parkplatznummer gesucht wurde
	public function fetchParkplatz($parkplatzNr = null){
		
		$resultSet = $this->getdbTable()->fetchAll($this->_dbTable->select()->where('parkplatzNr = ?', $parkplatzNr));
		
		foreach ($resultSet as $row){
			$entry = new Application_Model_Parkplatz();
			$entry->setParkplatzNr($row->parkplatzNr);
			$entry->setAnzahl($row->anzahl);
			$entry->setStandort($row->standort);
			$entry->setBeschreibung($row->beschreibung);
			$entry->setKalenderName($row->kalenderName);
			
			$entries[] = $entry;
		}
		return $entries;
	}
	
	//liefert ein Array zurück, welches über den Standort gesucht wurde
	public function fetchStandort($standort = null){
		
		$resultSet = $this->getdbTable()->fetchAll($this->_dbTable->select()->where('standort = ?', $standort));
		
		foreach ($resultSet as $row){
			$entry = new Application_Model_Parkplatz();
			$entry->setParkplatzNr($row->parkplatzNr);
			$entry->setAnzahl($row->anzahl);
			$entry->setStandort($row->standort);
			$entry->setBeschreibung($row->beschreibung);
			$entry->setKalenderName($row->kalenderName);
			
			$entries[] = $entry;
		}
		return $entries;
	}
	
	//liefert alle Einträge in der DB zurück
	public function fetchAll(){
		
		$resultSet = $this->getDbTable()->fetchAll();
		$entries   = array();
		
		foreach ($resultSet as $row) {
			$entry = new Application_Model_Parkplatz();
			$entry->setParkplatzNr($row->parkplatzNr);
			$entry->setAnzahl($row->anzahl);
			$entry->setStandort($row->standort);
			$entry->setBeschreibung($row->beschreibung);
			$entry->setKalenderName($row->kalenderName);
			
			$entries[] = $entry;
		}
		return $entries;
	}
	
}